<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>practise</title>
</head>
<body>
<div>正则表达式-训练</div>
</body>

<script>

    /**
     *
     *  是否包含中文  +: 一个or多个 ;  *: 0个or多个; ? : 0个or一个
     *  \uxxxx    查找以十六进制数 xxxx 规定的 Unicode 字符
     *
     *
     *
     * */
    function test_contain_Chinese() {

        var reg3 = /.*[\u4e00-\u9fa5]+.*$/;
        var isContainChinese = reg3.test("wdnmd茄子");
        console.log("isContainChinese: " + isContainChinese);
        isContainChinese = reg3.test("wdnmad");
        console.log("isContainChinese: " + isContainChinese);
    }

    test_contain_Chinese();

    //是否只是数字
    function test_num_only(){

        var regOnlyNum = /^[0-9]+$/;
        var isNum = regOnlyNum.test("1234aaa");
        console.log("isNum:" + isNum);
        isNum = regOnlyNum.test("1234");
        console.log("isNum: " + isNum);


    }

    test_num_only();

    //验证11位数字
    var reg11Num = /^\d{11}$/;
    isMatch = reg11Num.test("123456");
    console.log("isMatch: " + isMatch);
    isMatch = reg11Num.test("12345678911");
    console.log("isMatch: " + isMatch);

    //验证手机号
    var regPhoneNum = /^[1]\d{10}$/;
    isMatch = regPhoneNum.test("02345678911");
    console.log("isMatch: " + isMatch);
    isMatch = regPhoneNum.test("12345678911");
    console.log("isMatch: " + isMatch);
    isMatch = regPhoneNum.test("12345678911");
    console.log("isMatch: " + isMatch);


    //  \s 查找空白字符   参数g代表全剧查找
    let str3 = "hello java   ";
    var regTrim = /\s+/g; //这个正则的规则是 空格有一个or多个, 全局查找
    //var regTrim =/^\s+$/g; 错误写法为什么???  `
    //你想想, /^\s+$/g 这种写法是一个字符串的完整体, 不是一个片段,  我只要有空格片段就要替换, 不管它什么位置;
    console.log(str3.replace(regTrim, ""));

    //关于 ^ $ 正则中的^表示开头，$表示结束
    //  \d+$ 这个就匹配结尾是数字:比如:abc123^\d+ 就匹配开头是数字,比如:123abc
    var regStart = /^1.+a$/; //这个正则表示的是 以1 开头, 中间不管, a结尾的字符串
    let str4 = "123ab";
    console.log(regStart.test(str4));
    let str5 = "123aba";
    console.log(regStart.test(str5));

    //正则表达式对象也可以new 出来
    //let regObj=new RegExp("^\d+$"); 只有一个\错误, 在字符串里他是转义符
    let regObj = new RegExp("^\\d+$");
    console.log(regObj.test("12344aa"));
    console.log(regObj.test("12344"));
    //它默认是 有一个\ 和一个or多个 d 组成的字符串;
    regObj = new RegExp("^\d+$");
    console.log(regObj.test("\dddddd"));


    //验证长度为3的字符：
    let regLen = new RegExp("^.{3}$");
    console.log(regLen.test("123456"));
    console.log(regLen.test("123"));

    //为了避免转义可能造成的麻烦, 建议使用 let reg=/xx/; 的方式


    //String 中的split方法
    let list = "2:3:4:5".split(":");
    console.log(list.indexOf("2"));

    /* 实战: 项目真实开发中使用的正则
    input输入框数字输入控制
    */
    function onlyNumber(obj) {
        //得到第一个字符是否为负号
        var t = obj.value.charAt(0);
        //先把非数字的都替换掉，除了数字和.和-号    [^abc] 	查找任何不在方括号之间的字符。
        obj.value = obj.value.replace(/[^\d\.\-]/g, '');
        //前两位不能是0加数字      
        obj.value = obj.value.replace(/^0\d[0-9]*/g, '');
        //必须保证第一个为数字而不是.       
        obj.value = obj.value.replace(/^\./g, '');
        //保证只有出现一个.而没有多个.       
        obj.value = obj.value.replace(/\.{2,}/g, '.');
        //保证.只出现一次，而不能出现两次以上       
        obj.value = obj.value.replace('.', '$#$').replace(/\./g, '').replace('$#$', '.');
        //如果第一位是负号，则允许添加    
        obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d).*$/, '$1$2.$3');
        if (t == '-') {
            return;
        }
    }


    var regTest = /^[+]{0,1}(\d+)$|^[+]{0,1}(\d+\.\d+)$/;
    console.log(regTest.test("000000000003.0000"));

</script>


</html>
